import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import os

# 设置中文显示和输出目录
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
output_dir = '/Users/linshangjin/25CCM/NKU-C/dataset_csv'
output_dir2 = '/Users/linshangjin/25CCM/NKU-C/数据图表'
# os.makedirs(output_dir, exist_ok=True)

def process_gdp_data(file_path):
    """处理GDP季度数据"""
    # 读取数据（跳过前3行说明文字）
    df = pd.read_excel(file_path, sheet_name='季度数据', header=2)
    
    # 清洗数据：移除空行和说明列
    df = df.dropna(how='all').reset_index(drop=True)
    df = df.loc[:, ~df.columns.str.contains('Unnamed')]
    
    # 转换日期格式（2025年第二季度 -> 2025Q2）
    date_cols = [col for col in df.columns if '季度' in col]
    new_date_cols = []
    for col in date_cols:
        year, q = col.split('年')
        q = q.replace('第一季度', 'Q1').replace('第二季度', 'Q2').replace('第三季度', 'Q3').replace('第四季度', 'Q4')
        new_date_cols.append(f"{year}{q}")
    df.columns = ['指标'] + new_date_cols
    
    # 提取关键指标
    indicators = {
        'GDP': '国内生产总值(不变价)当季值(亿元)',
        '第一产业': '第一产业增加值(不变价)当季值(亿元)',
        '第二产业': '第二产业增加值(不变价)当季值(亿元)',
        '第三产业': '第三产业增加值(不变价)当季值(亿元)'
    }
    
    # 转置为时间序列数据
    data = {}
    for name, indicator in indicators.items():
        if indicator in df['指标'].values:
            s = df[df['指标'] == indicator].iloc[:, 1:].T
            s.columns = [name]
            data[name] = s
    
    gdp_df = pd.concat(data.values(), axis=1)
    gdp_df.index = pd.to_datetime(gdp_df.index.str.replace('Q1', '-03-31')
                                                .str.replace('Q2', '-06-30')
                                                .str.replace('Q3', '-09-30')
                                                .str.replace('Q4', '-12-31'))
    gdp_df = gdp_df.sort_index()
    
    # 计算产业结构占比
    for sector in ['第一产业', '第二产业', '第三产业']:
        gdp_df[f'{sector}占比'] = gdp_df[sector] / gdp_df['GDP'] * 100
    
    # 保存处理后的数据
    gdp_df.to_csv(f'{output_dir}/GDP_季度数据.csv', encoding='utf-8-sig')
    
    # 可视化
    plt.figure(figsize=(12, 6))
    for sector in ['第一产业', '第二产业', '第三产业']:
        plt.plot(gdp_df.index, gdp_df[sector], label=sector, marker='o')
    plt.title('三大产业增加值趋势（2016-2025）', fontsize=14)
    plt.xlabel('日期', fontsize=12)
    plt.ylabel('增加值（亿元）', fontsize=12)
    plt.legend()
    plt.grid(True, linestyle='--', alpha=0.6)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
    plt.gcf().autofmt_xdate()
    plt.savefig(f'{output_dir2}/三大产业增加值趋势.png', bbox_inches='tight', dpi=300)
    plt.close()
    
    # 结构占比可视化
    plt.figure(figsize=(12, 6))
    plt.stackplot(gdp_df.index, 
                 gdp_df['第一产业占比'], 
                 gdp_df['第二产业占比'], 
                 gdp_df['第三产业占比'],
                 labels=['第一产业', '第二产业', '第三产业'],
                 colors=['#4CAF50', '#2196F3', '#FF9800'])
    plt.title('产业结构占比变化（2016-2025）', fontsize=14)
    plt.xlabel('日期', fontsize=12)
    plt.ylabel('占比(%)', fontsize=12)
    plt.legend(loc='upper left')
    plt.grid(True, linestyle='--', alpha=0.6)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
    plt.savefig(f'{output_dir2}/产业结构占比.png', bbox_inches='tight', dpi=300)
    plt.close()
    
    return gdp_df

def process_income_data(file_path):
    """处理人均收入季度数据"""
    # 读取数据（跳过前3行说明文字）
    df = pd.read_excel(file_path, sheet_name='季度数据', header=2)
    
    # 清洗数据
    df = df.dropna(how='all').reset_index(drop=True)
    df = df.loc[:, ~df.columns.str.contains('Unnamed')]
    
    # 转换日期格式
    date_cols = [col for col in df.columns if '季度' in col]
    new_date_cols = []
    for col in date_cols:
        year, q = col.split('年')
        q = q.replace('第一季度', 'Q1').replace('第二季度', 'Q2').replace('第三季度', 'Q3').replace('第四季度', 'Q4')
        new_date_cols.append(f"{year}{q}")
    df.columns = ['指标'] + new_date_cols
    
    # 提取关键指标
    indicators = {
        '人均可支配收入': '居民人均可支配收入累计值(元)',
        '工资性收入': '居民人均可支配工资性收入累计值(元)',
        '经营净收入': '居民人均可支配经营净收入累计值(元)',
        '财产净收入': '居民人均可支配财产净收入累计值(元)',
        '转移净收入': '居民人均可支配转移净收入累计值(元)'
    }
    
    # 转置为时间序列数据
    data = {}
    for name, indicator in indicators.items():
        if indicator in df['指标'].values:
            s = df[df['指标'] == indicator].iloc[:, 1:].T
            s.columns = [name]
            data[name] = s
    
    income_df = pd.concat(data.values(), axis=1)
    income_df.index = pd.to_datetime(income_df.index.str.replace('Q1', '-03-31')
                                                   .str.replace('Q2', '-06-30')
                                                   .str.replace('Q3', '-09-30')
                                                   .str.replace('Q4', '-12-31'))
    income_df = income_df.sort_index()
    
    # 计算收入结构占比
    for col in ['工资性收入', '经营净收入', '财产净收入', '转移净收入']:
        income_df[f'{col}占比'] = income_df[col] / income_df['人均可支配收入'] * 100
    
    # 保存处理后的数据
    income_df.to_csv(f'{output_dir}/人均收入_季度数据.csv', encoding='utf-8-sig')
    
    # 可视化总收入趋势
    plt.figure(figsize=(12, 6))
    plt.plot(income_df.index, income_df['人均可支配收入'], label='人均可支配收入', color='#E91E63', linewidth=2)
    plt.title('居民人均可支配收入变化趋势', fontsize=14)
    plt.xlabel('日期', fontsize=12)
    plt.ylabel('元', fontsize=12)
    plt.legend()
    plt.grid(True, linestyle='--', alpha=0.6)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
    plt.gcf().autofmt_xdate()
    plt.savefig(f'{output_dir}/人均可支配收入趋势.png', bbox_inches='tight', dpi=300)
    plt.close()
    
    # 收入结构可视化
    plt.figure(figsize=(12, 6))
    plt.stackplot(income_df.index,
                 income_df['工资性收入占比'],
                 income_df['经营净收入占比'],
                 income_df['财产净收入占比'],
                 income_df['转移净收入占比'],
                 labels=['工资性收入', '经营净收入', '财产净收入', '转移净收入'],
                 colors=['#3F51B5', '#009688', '#FFC107', '#9C27B0'])
    plt.title('居民收入结构变化', fontsize=14)
    plt.xlabel('日期', fontsize=12)
    plt.ylabel('占比(%)', fontsize=12)
    plt.legend(loc='upper left')
    plt.grid(True, linestyle='--', alpha=0.6)
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
    plt.savefig(f'{output_dir2}/收入结构占比.png', bbox_inches='tight', dpi=300)
    plt.close()
    
    return income_df

# 处理GDP数据
gdp_file = '/Users/linshangjin/25CCM/NKU-C/dataset/季度数据 (1).xlsx'
print(f"正在处理GDP数据: {gdp_file}")
gdp_data = process_gdp_data(gdp_file)
print(f"GDP数据处理完成，结果已保存到{output_dir}目录")

# 处理收入数据
income_file = 'dataset/人均可支配收入季度数据.xlsx'
print(f"\n正在处理收入数据: {income_file}")
income_data = process_income_data(income_file)
print(f"收入数据处理完成，结果已保存到{output_dir}目录")

print("\n所有数据处理完毕！")